package repertorioInstrucciones;

import comun.Natural;

import maquina.Dato;
import maquina.PilaTrabajo;

public class MayorIgual extends Instruccion{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	public MayorIgual(){
		super();
	}
	@Override
	public PilaTrabajo accion(PilaTrabajo pilaT) {
		Dato a =  (Dato) pilaT.getPila().pop();
		Dato b =  (Dato) pilaT.getPila().pop(); 
		Dato<Boolean> d = null;
		boolean res = false;
		if (a.getDato() instanceof Boolean){
			boolean b1 = (Boolean) a.getDato();
			boolean b2 = (Boolean) b.getDato();
			int n1,n2;
			if (b1) n1 = 1; else n1 = 0;
			if (b2) n2 = 1; else n2 = 0;
			res = n2 >= n1;
		}
		else if (a.getDato() instanceof Character){
			char c1= (Character) a.getDato();
			char c2= (Character) b.getDato();
			int n1 = (int) c1;
			int n2 = (int) c2;
			res = c2 >= c1;
			//a es entero
		}else if(a.getDato() instanceof Integer){
			int n1 = (Integer) a.getDato();
			// y b es entero
			if (b.getDato() instanceof Integer){
				int n2 = (Integer) b.getDato();
				res = n2 >= n1;
				// y b es Natural
			}else if(b.getDato() instanceof Natural ){
				int n2 = ((Natural)b.getDato()).getValor();
				res = n2 >= n1;
				//y b es Real
			}else{
				float n2 = (Float)b.getDato();
				res = n2 >= n1;
			}

			//a es Natural
		}else if(a.getDato() instanceof Natural){
			int n1 = ((Natural)a.getDato()).getValor();
			// y b es entero
			if (b.getDato() instanceof Integer){
				int n2 = (Integer) b.getDato();
				res = n2 >= n1;
				// y b es Natural
			}else if(b.getDato() instanceof Natural ){
				int n2 = ((Natural)b.getDato()).getValor();
				res = n2 >= n1;
				//y b es Real
			}else{
				float n2 = (Float)b.getDato();
				res = n2 >= n1;
			}
		}else if(a.getDato() instanceof Float){
			float n1 = (Float) a.getDato();
			// y b es entero
			if (b.getDato() instanceof Integer){
				int n2 = (Integer) b.getDato();
				res = n2 >= n1;
				// y b es Natural
			}else if(b.getDato() instanceof Natural ){
				int n2 = ((Natural)b.getDato()).getValor();
				res = n2 >= n1;
				//y b es Real
			}else{
				float n2 = (Float)b.getDato();
				res = n2 >= n1;
			}
		}	

		d = new Dato<Boolean>(res);
		pilaT.getPila().push(d);
		return pilaT;

	}

}
